API Documentation
TestClass.h
1 // TestClass.h
3 //
5 
6 namespace nkDebug
7 {
61  class TestClass
62  {
63  public :
64 
65  // Attributes
66  // Functions
68  ClassInitFunctionDescriptor* _classInitFunction ;
69  ClassShutdownFunctionDescriptor* _classShutdownFunction ;
70  ClassInitFunctionDescriptor* _testFunctionInitFunction ;
71  ClassShutdownFunctionDescriptor* _testFunctionShutdownFunction ;
72 
73  // Tracking name
74  const char* _name ;
75 
76  public :
77 
78  // Constructor, destructor
82  TestClass () ;
88  TestClass (const nkLog::StringView& name) ;
92  virtual ~TestClass () ;
93 
94  // Execution
100  void execute (const TestRunParameters& parameters) const ;
101 
102  // Registering
109  bool setClassInitFunction (const std::function<bool ()>& func) ;
116  bool setClassShutdownFunction (const std::function<void ()>& func) ;
123  bool setTestFunctionInitFunction (const std::function<bool ()>& func) ;
130  bool setTestFunctionShutdownFunction (const std::function<void ()>& func) ;
131  } ;
132 
133  static const char NK_DEBUG_STATIC_EMPTY_CHAR [] = "" ;
134 
143  template <typename T, const char* T_NAME>
145  {
146  public :
147 
148  // Functions
149  // Constructor
154  : TestClass (T_NAME)
155  {
156  // Nothing to do
157  }
158 
159  // Factory
166  {
167  return new T () ;
168  }
169 
170  public :
171 
172  // Attributes
173  // Registered class pointer
175  } ;
176 }
177 
178 #define NK_TEST_CLASS(name) \
179  static const char NK_DEBUG_STATIC_CHAR_##name [] = #name ; \
180  class name : public nkDebug::RegisteredTestClass<name, NK_DEBUG_STATIC_CHAR_##name>
181 
182 #define NK_TEST_CLASS_NS(ns, name) \
183  namespace ns \
184  { \
185  static const char NK_DEBUG_STATIC_CHAR_##name [] = #ns "::" #name ; \
186  class name : public nkDebug::RegisteredTestClass<name, NK_DEBUG_STATIC_CHAR_##name> \
187 
188 #define NK_TEST_CLASS_NS_END }
189 
190 #define NK_TEST_FUNCTION(name) \
191  static void caller_##name () \
192  { \
193  return name() ; \
194  } \
195  \
196  inline static const std::function<void ()>& registered_##name = _registered->_testFunctions.registerFunction(#name, &caller_##name) ; \
197  \
198  static void name () \
199 
200 #define NK_TEST_CLASS_INIT \
201  static bool classInitFunctionCaller () \
202  { \
203  return classInitFunction() ; \
204  } \
205  \
206  inline static const bool classInitRegistered = _registered->setClassInitFunction(classInitFunctionCaller) ; \
207  \
208  static bool classInitFunction () \
209 
210 #define NK_TEST_CLASS_SHUTDOWN \
211  static void classShutdownFunctionCaller () \
212  { \
213  classShutdownFunction() ; \
214  } \
215  \
216  inline static const bool classShutdownRegistered = _registered->setClassShutdownFunction(classShutdownFunctionCaller) ; \
217  \
218  static void classShutdownFunction () \
219 
220 #define NK_TEST_FUNCTION_INIT \
221  static bool testFunctionInitFunctionCaller () \
222  { \
223  return testFunctionInitFunction() ; \
224  } \
225  \
226  inline static const bool testFunctionInitRegistered = _registered->setTestFunctionInitFunction(testFunctionInitFunctionCaller) ; \
227  \
228  static bool testFunctionInitFunction () \
229 
230 #define NK_TEST_FUNCTION_SHUTDOWN \
231  static void testFunctionShutdownFunctionCaller () \
232  { \
233  testFunctionShutdownFunction() ; \
234  } \
235  \
236  inline static const bool testFunctionShutdownRegistered = _registered->setTestFunctionShutdownFunction(testFunctionShutdownFunctionCaller) ; \
237  \
238  static void testFunctionShutdownFunction () \
nkDebug::RegisteredTestClass
Holds informations about a registered test class.
Definition: TestClass.h:145
nkDebug::TestClass::_testFunctions
FunctionSet _testFunctions
Registered functions to run.
Definition: TestClass.h:67
nkLog::StringView
Allows to exchange strings with external code.
Definition: StringView.h:18
nkDebug::TestClass::_testFunctionInitFunction
ClassInitFunctionDescriptor * _testFunctionInitFunction
Callback called before calling each function.
Definition: TestClass.h:70
nkDebug::UnitTester::registerTestClass
static TestClass * registerTestClass(const std::function< TestClass *()> &factoryFunction)
nkDebug::FunctionSet
A function set holding testing functions.
Definition: FunctionSet.h:14
nkDebug::TestClass::execute
void execute(const TestRunParameters &parameters) const
nkDebug::TestClass::_classShutdownFunction
ClassShutdownFunctionDescriptor * _classShutdownFunction
Callback called after all test functions have been called.
Definition: TestClass.h:69
nkDebug::TestClass::_name
const char * _name
Class name for tracking purposes.
Definition: TestClass.h:74
nkDebug::TestClass::setTestFunctionInitFunction
bool setTestFunctionInitFunction(const std::function< bool()> &func)
nkDebug::TestClass::_testFunctionShutdownFunction
ClassShutdownFunctionDescriptor * _testFunctionShutdownFunction
Callback called after calling each function.
Definition: TestClass.h:71
nkDebug::TestClass::setTestFunctionShutdownFunction
bool setTestFunctionShutdownFunction(const std::function< void()> &func)
nkDebug::TestClass::setClassShutdownFunction
bool setClassShutdownFunction(const std::function< void()> &func)
nkDebug::RegisteredTestClass::factoryFunc
static TestClass * factoryFunc()
Definition: TestClass.h:165
nkDebug::TestRunParameters
Parameters allowing to drive a test run sequence.
Definition: TestRunParameters.h:12
nkDebug::RegisteredTestClass::_registered
static TestClass * _registered
Registering witness.
Definition: TestClass.h:174
nkDebug::TestClass::_classInitFunction
ClassInitFunctionDescriptor * _classInitFunction
Callback called before calling the test functions.
Definition: TestClass.h:68
nkDebug::TestClass::TestClass
TestClass()
nkDebug::RegisteredTestClass::RegisteredTestClass
RegisteredTestClass()
Definition: TestClass.h:153
nkDebug
Encompasses all API of component NilkinsDebug.
Definition: LogManager.h:7
nkDebug::TestClass::TestClass
TestClass(const nkLog::StringView &name)
nkDebug::TestClass::~TestClass
virtual ~TestClass()
nkDebug::TestClass
The test enabling class, allowing registration within the UnitTester.
Definition: TestClass.h:62
nkDebug::TestClass::setClassInitFunction
bool setClassInitFunction(const std::function< bool()> &func)